package com.shuai.utils.user;

import com.shuai.model.loginInfo.UserDetailInfo;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * 用户详细信息
 *
 * @author shuai
 * @since 2022
 */
public class UserUtil {
    final static String INITPASSWORD = "111111";
    /**
     * 获取安全上下文对象
     * @return
     */
    public static Authentication getSecurityContext(){
        SecurityContext securityContext = SecurityContextHolder.getContext();
        Authentication authentication = securityContext.getAuthentication();
        return authentication;
    }

    /**
     * 获取用户详细信息
     * @return
     */
    public static UserDetailInfo getUserInfo(){
        return (UserDetailInfo)getSecurityContext().getPrincipal();
    }

    /**
     * 获取username
     * @return
     */
    public static String getUserName(){
        return getUserInfo().getUsername();
    }

//    /**
//     * 获取用户角色-List
//     * @return
//     */
//    public static List<Long> getUserRoleList(){
//        return Optional.ofNullable(getUserInfo().getRoleList().stream().map(SysRole::getId).collect(Collectors.toList())).orElse(Lists.newArrayList());
//    }

//    /**
//     * 获取用户角色-数组
//     * @return
//     */
//    public static String[] getUserRoleArray(){
//        List<String> list = getUserRoleList().stream().map(String::valueOf).collect(Collectors.toList());
//        String[] array = new String[list.size()];
//        return list.toArray(array);
//    }

//    /**
//     * 获取用户角色-字符串
//     * @return
//     */
//    public static String getUserRoles(){
//        return Optional.ofNullable(getUserRoleList().stream().map(String::valueOf).collect(Collectors.joining(","))).orElse("");
//    }

//    /**
//     * 获取用户角色-map
//     * @return
//     */
//    public static Map<Long, String> getUserRoleMap(){
//        List<SysRole> roleList = getUserInfo().getRoleList();
//        Map<Long, String> map = roleList.stream().collect(Collectors.toMap(SysRole::getId, SysRole::getRoleName,(key1, key2) -> key2));
//        return map;
//    }
//
//    /**
//     * 获取用户权限-List
//     * @return
//     */
//    public static List<Long> getUserPermissionList(){
//        return Optional.ofNullable(getUserInfo().getPermissionList().stream().map(SysPermission::getId).collect(Collectors.toList())).orElse(Lists.newArrayList());
//    }

//    /**
//     * 获取用户权限-数组
//     * @return
//     */
//    public static String[] getUserPermissionArray(){
//        List<String> list = getUserPermissionList().stream().map(String::valueOf).collect(Collectors.toList());
//        String[] array = new String[list.size()];
//        return list.toArray(array);
//    }

//    /**
//     * 获取用户权限-字符串
//     * @return
//     */
//    public static String getUserPermissions(){
//        return Optional.ofNullable(getUserPermissionList().stream().map(String::valueOf).collect(Collectors.joining(","))).orElse("");
//    }

//    /**
//     * 获取用户权限-map
//     * @return
//     */
//    public static Map<Long, String> getUserPermissionMap(){
//        List<SysPermission> permissionList = getUserInfo().getPermissionList();
//        Map<Long, String> map = permissionList.stream().collect(Collectors.toMap(SysPermission::getId, SysPermission::getLabel,(key1, key2) -> key2));
//        return map;
//    }

    /**
     * 设置默认用户密码
     * @return
     */
    public static String getUserPassWord(){
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
         String password = encoder.encode(INITPASSWORD);
        return password;
    }
}
